package GUI;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import Aktorzy.Osoba;
import Baza.BazaDanych;
import Baza.DataFormats;
import Baza.Konfiguracja;
/**
 * Klasa dodaje okno zmiany hasla uzytkownika
 */
public class ZmianaHasla {
	private JFrame frame;
	private Boolean isPracownik;
	Osoba osoba;
	private Konfiguracja konfiguracja = new Konfiguracja();
	
	public ZmianaHasla(Osoba osoba, Boolean isPracownik){
		this.isPracownik = isPracownik;
		this.osoba = osoba;
		createAndShowGUI();
	}
	
	private JFrame createAndShowGUI(){
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		addComponentToPane(frame.getContentPane());
		frame.pack();
		frame.setLocation(50, 50);
		frame.setResizable(false);
        frame.setVisible(true);
        frame.setTitle(konfiguracja.getChangePasswordField());
        
        return frame;
	}
	
	private void addComponentToPane(Container pane){
		JPanel changePassword = changePasswordPanel();
		pane.add(changePassword);
	}
	
	private JPasswordField oldPass, newPass;
	
	private JPanel changePasswordPanel(){
		JPanel panel = new JPanel(new GridBagLayout());
		
		JTextField login = new JTextField(osoba.getLogin());
		login.setEditable(false);
		login.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		
		oldPass = new JPasswordField(osoba.getHaslo());
		oldPass.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		
		newPass = new JPasswordField(osoba.getHaslo());
		newPass.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		
		JButton acceptButton = getAcceptButton();
		JButton cancelButton = getCancelButton();
		
		
		GridBagConstraints grid = new GridBagConstraints();  
		grid.gridwidth = GridBagConstraints.REMAINDER;
		
		panel.add(new JLabel(konfiguracja.getLoginField()));
		panel.add(login, grid);
		panel.add(new JLabel(konfiguracja.getPasswordField()));
		panel.add(oldPass, grid);
		panel.add(new JLabel(konfiguracja.getPasswordNewField()));
		panel.add(newPass, grid);
		panel.add(acceptButton);
		panel.add(cancelButton);

		return panel;
	}
	
	private JButton getAcceptButton(){
		JButton accept = new JButton(konfiguracja.getAcceptButton());
		accept.addActionListener(new ActionListener() {
			
			@SuppressWarnings("deprecation")
			@Override
			public void actionPerformed(ActionEvent e) {
				JFrame errorFrame = null;
				if(!DataFormats.isNumberLetter(newPass.getText().trim())){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getPasswordField()+konfiguracja.getNumberLetterTypeError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else{
					BazaDanych database = new BazaDanych();
					database.changePassword(osoba.getLogin(), oldPass.getText().trim(), newPass.getText().trim(), isPracownik);
					database.closeConnection();
				}
			}
		});
		return accept;
	}
	
	private JButton getCancelButton(){
		JButton cancel = new JButton(konfiguracja.getCancelButton());
		cancel.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				frame.dispose();
			}
		});
		return cancel;
	}
}
